home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / comm / tcp / rxsocket.lha / rxsocket / examples / revserv.rexx < prev    next >
OS/2 REXX Batch file  |  2000-11-28  |  2KB  |  80 lines

  1. /*
  2.     A simple stand alone service example.
  3.     It waits for connections on port 4000.
  4.     After a connection is made,
  5.     it waits for a string of max 256 char len and send it back reversed.
  6.  
  7.     To run it:
  8.     - be sure TCP port 4000 is free (e.g. you don't have pserv.rexx
  9.       enabled in inetd database, if you installed it).
  10.       Open a shell and write:
  11.       - rx revserv.
  12.  
  13.     To stop it:
  14.     - CTRL_C in the shell where rvserv is running
  15.     or
  16.     - rx "shell 'REVSERVPORT' 'QUIT'"
  17. */
  18.  
  19. l="rexxsupport.library";if ~show("L",l) then;if ~addlib(l,0,-30) then do;say "can't find" l;exit;end
  20. l="rmh.library";if ~show("L",l) then;if ~addlib(l,0,-30) then do;say "can't find" l;exit;end
  21. l="rxsocket.library";if ~show("L",l) then;if ~addlib(l,0,-30) then do;say "can't find" l;exit;end
  22.  
  23. prg = ProgramName("NOEXT")
  24.  
  25. if ~Open("STDERR","*","W") | ~OpenPort("REVSERVPORT") then exit
  26.  
  27. sock = socket("INET","STREAM","IP")
  28. if sock<0 then call err "can't create socket:" errno()
  29.  
  30. local.ADDRFAMILY = "INET"
  31. local.ADDRADDR    = 0
  32. local.ADDRPORT   = 4000
  33. if bind(sock,"LOCAL")<0 then call err "can't bind port 4000:" errno()
  34.  
  35. sig = PortSignal("REVSERVPORT")
  36. SEL.READ.0=sock
  37. open = 1
  38. do while open
  39.  
  40.     if Listen(sock,5)<0 then call err "listen error:" errno()
  41.  
  42.     res = WaitSelect("SEL",,,sig)
  43.  
  44.     pkt = GetPkt("REVSERVPORT")
  45.     if pkt ~= null() then do
  46.         comm= GetArg(pkt)
  47.         call reply(pkt)
  48.         if upper(comm) == "QUIT" then open = 0
  49.     end
  50.  
  51.     if sel.0.read then do
  52.  
  53.         lsock = accept(sock,"REMOTE")
  54.         if lsock<0 then call err "accept() error:" errno()
  55.  
  56.         auth = AuthFun(remote.addrAddr,4000,remote.addrPort)
  57.         say auth
  58.  
  59.         len = recv(lsock,"BUF",256)
  60.         if len>0 then do
  61.             buf = reverse(buf)
  62.             if send(lsock,buf) ~= length(buf) then call err "send() error:" errno()
  63.         end
  64.         if ( len < 0 ) & ( errno() ~= 35 )
  65.             then call err "recv() error:" errno()
  66.  
  67.         call CloseSocket(lsock)
  68.  
  69.     end
  70.  
  71. end
  72.  
  73. exit
  74.  
  75. err: procedure expose prg
  76. parse arg msg
  77.     say prg":" msg
  78.     exit
  79.  
  80.